<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java-Properties-Datei</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Java-Properties-Datei"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java-Properties-Datei rootpage-Java-Properties-Datei skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java-Properties-Datei</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Eine <b>Java-Properties-Datei</b> ist eine <a href="Konfigurationsdatei" title="Konfigurationsdatei">Konfigurationsdatei</a>, die hauptsächlich zur Speicherung von Anwendungsdaten im Umfeld der Programmiersprache <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> verwendet wird. Eine <i>Property</i> (deutsch „Eigenschaft“) ist in diesem Zusammenhang ein Text, der unter einem bestimmten Namen abgelegt ist. Java-Properties-Dateien haben üblicherweise die <a href="Dateiendung" class="mw-redirect" title="Dateiendung">Dateiendung</a> <code>.properties</code>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Struktur">Struktur</h2></div>
<p>Das folgende Beispiel zeigt einen Ausschnitt aus einer einfachen Konfigurationsdatei:
</p>
<div class="mw-highlight mw-highlight-lang-properties mw-content-ltr" dir="ltr"><pre><span></span><span class="c1"># Dies ist ein Kommentar</span>
<span class="c1">! Dies ist ebenfalls ein Kommentar</span>
<span class="na">wenig</span><span class="w"> </span><span class="s">Text</span>
<span class="na">pi</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">3.14</span>
<span class="na">lang</span><span class="o">:</span><span class="s">de</span>
<span class="na">vieltext</span><span class="w"> </span><span class="s">Dieser Text </span><span class="se">\</span>
<span class="w"> </span><span class="s">läuft über zwei Zeilen.</span>
<span class="na">paramText</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Text mit dynamischem Parameter: {0}</span>
<span class="na">unicodeText</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">Ein Smiley: </span><span class="se">\u</span><span class="s">263A</span>
</pre></div>
<p>Das Beispiel enthält zwei <a href="Kommentar_(Programmierung)" title="Kommentar (Programmierung)">Kommentarzeilen</a> und definiert sechs Werte für die Namen <code>wenig</code>, <code>pi</code>, <code>lang</code>, <code>vieltext</code>, <code>paramText</code> und <code>unicodeText</code>.
</p><p>Wie sich aus dem Beispiel erkennen lässt, gibt es Kommentarzeilen, die mit einem <a href="Rautezeichen" title="Rautezeichen">Rautezeichen</a> <code>#</code> oder einem <a href="Ausrufezeichen" title="Ausrufezeichen">Ausrufezeichen</a> <code>!</code> beginnen, und Datenzeilen, in denen ein Name und ein Text definiert werden.<sup id="cite_ref-store_1-0" class="reference"><a href="#cite_note-store-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Name und Text können auf drei Arten voneinander getrennt werden, wobei die Trennzeichen nicht zum Schlüssel oder Text gehören.<sup id="cite_ref-store_1-1" class="reference"><a href="#cite_note-store-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<ol><li>durch ein oder mehrere <a href="Leerzeichen" title="Leerzeichen">Leerzeichen</a>: Im obigen Beispiel hat der Schlüssel <code>wenig</code> den Wert „Text“, entsprechend <code>vieltext</code>.</li>
<li>durch ein <a href="Gleichheitszeichen" title="Gleichheitszeichen">Gleichheitszeichen</a> <code>=</code>, umgeben von keinem oder beliebig vielen Leerzeichen: Im obigen Beispiel hat der Schlüssel <code>pi</code> den Wert „3.14“.</li>
<li>durch einen <a href="Doppelpunkt" title="Doppelpunkt">Doppelpunkt</a> <code>:</code>, umgeben von keinem oder beliebig vielen Leerzeichen: Im obigen Beispiel hat der Schlüssel <code>lang</code> den Wert „de“.</li></ol>
<p>Ein <a href="Umgekehrter_Schr%C3%A4gstrich" class="mw-redirect" title="Umgekehrter Schrägstrich">umgekehrter Schrägstrich</a> <code>\</code> am Ende der Zeile bedeutet, dass der Text in der nächsten Zeile fortgesetzt wird.<sup id="cite_ref-store_1-2" class="reference"><a href="#cite_note-store-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Stehen am Ende der Zeile mehrere umgekehrte Schrägstriche, wird der Text nur dann in der nächsten Zeile fortgesetzt, wenn die Anzahl der Schrägstriche ungerade ist. Endet die Zeile z. B. auf <code>\\</code>, so reicht der Text nur bis zum Ende der Zeile und enthält am Ende einen umgekehrten Schrägstrich; endet die Zeile hingegen auf <code>\\\</code>, dann wird der Text in der nächsten Zeile fortgesetzt.<sup id="cite_ref-store_1-3" class="reference"><a href="#cite_note-store-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Als Zeichencodierung für den Text wird <a href="ISO_8859-1" title="ISO 8859-1">ISO 8859-1</a> verwendet. Unicode-Zeichen, die nicht im ISO-Encoding enthalten sind, müssen mit einer <a href="Escape-Sequenz" title="Escape-Sequenz">Escape-Sequenz</a> codiert werden.<sup id="cite_ref-store_1-4" class="reference"><a href="#cite_note-store-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Verwendung_in_Java-Programmen">Verwendung in Java-Programmen</h2></div>
<p>Eine solche Java-Properties-Datei kann mittels der <a href="Klasse_(Objektorientierung)" title="Klasse (Objektorientierung)">Klasse</a> <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/8/docs/api/java/util/Properties.html">java.util.Properties</a></code> eingelesen werden. Anschließend können die definierten Werte über deren <a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methoden</a> abgefragt werden. Das folgende Code-Fragment erzeugt ein Properties-Objekt, liest eine Datei namens <code>beispiel.properties</code> ein, und legt den Wert der Property <code>lang</code> in einer Variablen namens <code>sprache</code> ab.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">java.io.FileInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.io.BufferedInputStream</span><span class="p">;</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Properties</span><span class="p">;</span>
<span class="err">…</span>
<span class="n">Properties</span><span class="w"> </span><span class="n">properties</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Properties</span><span class="p">();</span>
<span class="n">BufferedInputStream</span><span class="w"> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">BufferedInputStream</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">FileInputStream</span><span class="p">(</span><span class="s">"beispiel.properties"</span><span class="p">));</span>
<span class="n">properties</span><span class="p">.</span><span class="na">load</span><span class="p">(</span><span class="n">stream</span><span class="p">);</span>
<span class="n">stream</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
<span class="n">String</span><span class="w"> </span><span class="n">sprache</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">properties</span><span class="p">.</span><span class="na">getProperty</span><span class="p">(</span><span class="s">"lang"</span><span class="p">);</span>
</pre></div>
<p>Bei der <code>load</code>-Methode muss die <a href="Ausnahmebehandlung" title="Ausnahmebehandlung">Ausnahme</a> <code><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html">IOException</a></code> abgefangen werden. Der Übersicht wegen wurde der Try-Catch-Block weggelassen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Platzhalter">Platzhalter</h2></div>
<p>Eine <a href="Positive_und_negative_Zahlen" title="Positive und negative Zahlen">nicht negative</a> <a href="Ganze_Zahl" title="Ganze Zahl">ganze Zahl</a> in geschweiften Klammern <code>{}</code> steht für einen Text, der zur <a href="Laufzeit_(Informatik)" title="Laufzeit (Informatik)">Laufzeit</a> des Programms ergänzt werden soll. Sinnvollerweise beginnen die Zahlen in den Klammern mit <code>0</code> und sind fortlaufend. Sie dürfen mehrfach sowie in beliebiger <a href="Reihenfolge" title="Reihenfolge">Reihenfolge</a> auftreten. Solche Ersetzungen sind für die <a href="Internationalisierung_(Softwareentwicklung)" title="Internationalisierung (Softwareentwicklung)">Internationalisierung</a> oder <a href="Lokalisierung_(Softwareentwicklung)" title="Lokalisierung (Softwareentwicklung)">Lokalisierung</a> von Programmen sinnvoll, wo dynamisch zu erzeugende Textbestandteile in unterschiedlichen <a href="Sprache" title="Sprache">Sprachen</a> an unterschiedlichen Stellen oder in unterschiedlicher Reihenfolge auszugeben sind.
</p><p>Die Ersetzung des Parameters kann mit folgendem Code realisiert werden:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">String</span><span class="w"> </span><span class="n">paramText</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">properties</span><span class="p">.</span><span class="na">getProperty</span><span class="p">(</span><span class="s">"paramText"</span><span class="p">);</span>
<span class="n">String</span><span class="w"> </span><span class="n">dynText</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"dynamisch eingesetzter Text"</span><span class="p">;</span>
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">MessageFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="n">paramText</span><span class="p">,</span><span class="n">dynText</span><span class="p">));</span>
</pre></div>
<p>Ausgabe:
</p>
<pre>Text mit dynamischem Parameter: dynamisch eingesetzter Text
</pre>
<p>Bei mehreren Ersetzungsparametern muss für „dynText“ ein <a href="Array_(Datentyp)" title="Array (Datentyp)">Array</a> oder eine <a href="Menge_(Datenstruktur)" title="Menge (Datenstruktur)">Menge</a> mit den Ersetzungswerten übergeben werden.
</p><p>Streng genommen ist dies kein Feature des Properties-Mechanismus, wird hier jedoch erwähnt, da es in diesem Zusammenhang vielfach Verwendung findet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Internationalisierung">Internationalisierung</h2></div>
<p>Ein weiteres Feature des Properties-Mechanismus in Java ist das Aufteilen der Inhalte pro <a href="Locale" title="Locale">Locale</a>. Das macht man durch ein Suffix im Dateinamen kenntlich. Eine Properties-Datei <code>messages.properties</code> speziell für deutschsprachige Texte würde man <code>messages_de.properties</code> benennen. Das kann man mit der Angabe einer Region noch weiter eingrenzen. Eine Property-Datei für österreichisches Deutsch würde demnach so benannt: <code>messages_de_AT.properties</code>. Eine Variante ohne Suffix sollte als Fallback möglichst immer vorhanden sein. Seit Java 9 werden ResourceBundles-Properties standardmäßig mit UTF-8 decodiert, wodurch die unleserlichen Escape-Sequenzen entfallen können. Sollten beim Dekodieren Probleme auftreten, wird es mit ISO 8859-1 automatisch erneut versucht.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-store-1"><span class="mw-cite-backlink">↑ <sup><a href="#cite_ref-store_1-0">a</a></sup> <sup><a href="#cite_ref-store_1-1">b</a></sup> <sup><a href="#cite_ref-store_1-2">c</a></sup> <sup><a href="#cite_ref-store_1-3">d</a></sup> <sup><a href="#cite_ref-store_1-4">e</a></sup></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html"><i>Properties</i>.</a> Java API Specification</span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://openjdk.java.net/jeps/226"><i>JEP 226: UTF-8 Property Resource Bundles.</i></a><span class="Abrufdatum"> Abgerufen am 22. Juni 2020</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava-Properties-Datei&rft.title=JEP+226%3A+UTF-8+Property+Resource+Bundles&rft.description=JEP+226%3A+UTF-8+Property+Resource+Bundles&rft.identifier=https%3A%2F%2Fopenjdk.java.net%2Fjeps%2F226"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2024-10-14" href="https://de.wikipedia.org/wiki/?title=Java-Properties-Datei&oldid=249414150">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>